21 апреля 2025
Работа с компонентом TfrShellTreeView в FastReport VCL
Не все знают, что внутри FastReport содержатся не только компоненты отчетов, но и многое другое. В частности, имеются несколько компонентов, которые можно применять в своих приложениях также, как и остальные компоненты Delphi. Библиотека таких компонентов постоянно пополняется. В данной статье мы рассмотрим один из таких компонентов, а именно – TfrShellTreeView.
Этот компонент предназначен для отображения элементов файловой системы и частично является аналогом таких компонентов, как TDirectoryListBox, TDirectoryOutline в Delphi и TShellTreeView в Lazarus. Если вы хотите посмотреть его внешний вид не запуская IDE, то это то «дерево», которое вы видите слева в окне проводника.
Компонент отлично работает в операционных системах Windows и Linux для Delphi и Lazarus. Среда разработки FMX не поддерживается.
TfrShellTreeView использует многие возможности операционной системы. Например, в Windows можно заходить в zip архивы как в папки, и даже манипулировать их содержимым: извлекать и добавлять файлы. Под Linux часть функциональности компонента может быть недоступна, в зависимости от установленной версии Linux. Важное примечание: отображение дерева и выбор элементов в нём будут доступны под любой ОС.
Основное свойство TfrShellTreeView, которое управляет взаимодействием с операционной системой, является OptionsShell.
ContextMenu – указывает нужно ли показывать системное контекстное меню для выбранного файла.
ShowFolder – это свойство отвечает за отображение папок.
ShowHidden – данное свойство обозначает будут или нет видны скрытые файлы.
ShowNonFolders – это свойство отвечает за отображение обычных файлов (не папок).
TrackShellChanges – данное свойство отвечает за реагирование на изменения в файловой системе. Если в компоненте будет открыта какая-то папка, то при её изменении (например, копировании в неё файла) в компоненте также автоматически будет добавлен узел, ссылающийся на этот файл.
TfrShellTreeView поддерживает набор горячих клавиш, характерных для стандартного файлового диалога или проводника в Windows (Ctrl+С, Ctrl+V, Delete и т.д.) со стандартными диалогами.
Также компонент TfrShellTreeView поддерживает Drag&Drop элементов файловой системы как внутри себя, так и из других (но не всех) файловых менеджеров. Для разрешения операций Drag&Drop используется свойство OptionsBehavior.AllowDragDrop. Перетаскивание осуществляется с использованием функций операционной системы.
Остальные свойства аналогичны как в компонентах TTreeView и TfrTreeView. Однако стоит отметить, что они сгруппированы в группы по типу использования: OptionsBehavior, OptionsSelection, OptionsShell, OptionsView. Это позволит вам быстрее находить нужные свойства.
Как упоминалось выше, компонент предназначен для отображения файловой системы компьютера. По умолчанию компонент настроен на отображение корневой папки вашей системы: «Рабочий стол» в Windows или “/” в Linux. Однако возможности компонента этим не исчерпываются.
Поместим компонент TfrShellTreeView на форму и откроем его редактор:
Редактор TfrShellTreeView внешне похож на редакторы компонентов TTreeView и TfrTreeView, но в нём имеются 2 новые кнопки:
New shell Root Item.
New shell Root SubItem.
Как мы видим на скрине редактора в компоненте могут быть:
Обычные узлы, содержащие только текст, например «New simple item 1».
Узлы с местоположением в файловой системе, такие как «Этот компьютер», «Lazarus», «data». Такие узлы далее мы будем называть шелл-узлами.
Обычные и дочерние узлы создаются и редактируются также, как и в обычных TreeViews.
Узлы, которые имеют ссылку на элемент файловой структуры, создаются с помощью кнопок «New shell Root Item». Таким образом будет создан шелл-узел того же уровня, что и текущий. Если нажать на «New shell Root SubItem», то будет создан дочерний шелл-узел по отношению к текущему узлу. Обратите внимание, что у шелл-узла нельзя создавать дочерние узлы, а у обычного узла – можно.
Редактирование шелл-узлов сводится к указанию для какой папки привязан данный узел. Привязку к папке можно задать с помощью констант типа TfrRootNodes. Этими константами задаются такие места, как рабочий стол, автозагрузка и так далее. Если же задать константу rfCustomPath, то появляется возможность добавить путь к папке файловой системы в дереве каталогов ниже. Также этот путь можно задать с помощью окна редактирования, расположенного ниже дерева каталогов. Например, на скрине ниже задается путь к папке Lazarus, расположенной на диске C:\.
Как и у обычного TreeView, обычным узлам компонента можно задавать иконки. Шелл-нодам иконки задавать нельзя, там используются иконки, заданные в операционной системе. Для узлов фактически используется индекс иконки, который добавляется в свойстве ImageIndex. Остальные индексы иконок не используются. Также из-за особенностей использования компонента не реализованы некоторые другие свойства. Например, отсутствует возможность множественного выбора элементов.
Самое часто используемое свойство – это конечно же TfrShellTreeView.SelectedPath. Если выбран шелл-узел, то это свойство содержит путь к папке, на которую указывает данный узел. Иначе это свойство равно пустой строке.
Помимо этого, работа с компонентом доступна и программными способами. Добавить обычный (не шелл) узел можно такими же способами, что и обычный TTreeView.
frShellTreeView1.Items.Add(nil,Edit1.Text);
//добавляем корневой узел с текстом из Edit1
Добавление узла к текущему выделенному узлу:
procedure TForm1.Button5Click(Sender: TObject);
var N:TfrShellTreeViewNode;
begin
N:=(frShellTreeView1.Selected) as TfrShellTreeViewNode;
if N=nil then Exit;
frShellTreeView1.Items.AddChild(N,Edit1.Text);
end;
Удалить узел также просто. Например, так удаляется текущий выделенный узел:
procedure TForm1.Button2Click(Sender: TObject);
var N:TfrShellTreeViewNode;
begin
N:=(frShellTreeView1.Selected) as TfrShellTreeViewNode;
if N=nil then exit;
frShellTreeView1.Items.Delete(N);
end;
Впрочем, для удаления узла можно просто вызывать его метод Free.
К сожалению, в настоящее время компонент не поддерживает генерацию событий, происходящих в моменты изменения связанных с ним папок файловой системы. Остальная функциональность компонента во многом совпадает со стандартным TreeView.
В заключение можно сказать, что FastReport — это не только инструмент для создания отчётов, но и источник дополнительных компонентов, которые можно использовать в приложениях на Delphi. TfrShellTreeView — предоставляет удобный способ отображения элементов файловой системы и может быть полезен в различных проектах. Библиотека компонентов FastReport постоянно пополняется, что делает этот инструмент ещё более привлекательным для разработчиков.